unit dmrelatorio;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, FileUtil, LResources, Forms, Controls, Dialogs,
  ZConnection, ZDataset, ZSqlUpdate, ZSequence, LR_Class, LR_DBSet, LR_E_TXT,
  lr_e_pdf, ftecnicocadastro, flaboratoriocadastro, fprodutorcadastro,
  fprodutorbusca;

type

  { TDataRelatorio }

  TDataRelatorio = class(TDataModule)
    PdfExport: TfrTNPDFExport;
    DialogPdf: TSaveDialog;
    SourceMestre: TDatasource;
    RDatasetDetalhe: TfrDBDataSet;
    rdatasetMestre: TfrDBDataSet;
    ReportPrincipal: TfrReport;
    ZQueryDetalheareia: TFloatField;
    ZQueryDetalheargila: TFloatField;
    ZQueryDetalheclassificacao: TStringField;
    ZQueryDetalheid_amostra: TLongintField;
    ZQueryDetalheid_analise: TLongintField;
    ZQueryDetalhepeso_becker_1: TLongintField;
    ZQueryDetalhepeso_becker_2: TLongintField;
    ZQueryDetalhepeso_volume_pipetado_1: TLongintField;
    ZQueryDetalhepeso_volume_pipetado_2: TLongintField;
    ZQueryDetalhereferencia_cliente: TStringField;
    ZQueryDetalhereferencia_laboratorio: TLongintField;
    ZQueryDetalhesilte: TFloatField;
    ZQueryMestre: TZReadOnlyQuery;
    ZQueryDetalhe: TZReadOnlyQuery;
    ZQueryMestrebairro: TStringField;
    ZQueryMestrecep: TStringField;
    ZQueryMestrecrea: TStringField;
    ZQueryMestredata: TDateField;
    ZQueryMestreemail: TStringField;
    ZQueryMestreendereco_laboratorio: TStringField;
    ZQueryMestreendereco_produtor: TStringField;
    ZQueryMestreformacao: TStringField;
    ZQueryMestreid_analise: TLongintField;
    ZQueryMestremunicipio_laboratorio: TStringField;
    ZQueryMestremunicipio_produtor: TStringField;
    ZQueryMestrenome_laboratorio: TStringField;
    ZQueryMestrenome_produtor: TStringField;
    ZQueryMestrenome_tecnico: TStringField;
    ZQueryMestrenumero_registro: TLongintField;
    ZQueryMestretelefone: TStringField;
    ZQueryMestreuf_laboratorio: TStringField;
    ZQueryMestreuf_produtor: TStringField;
    ZQueryMestrevalor: TFloatField;
    procedure GeraRelatorio();
    procedure MostraRelatorio();
    procedure SalvaPdf();
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  DataRelatorio: TDataRelatorio;

implementation

uses dmprincipal, fanaliselancamento, dmanalise;

{ TDataRelatorio }

procedure TDataRelatorio.GeraRelatorio();
begin
  with ZQueryMestre do
  begin
    Close();
    SQL.Clear;
    SQL.Add('SELECT');
    SQL.Add('p.nome_produtor, p.endereco as endereco_produtor,');
    SQL.Add('t.nome_tecnico, t.formacao, t.crea,');
    SQL.Add('l.nome_laboratorio, l.telefone, l.email,');
    SQL.Add('l.endereco as endereco_laboratorio, l.bairro, l.cep,');
    SQL.Add('mp.nome_municipio as municipio_produtor,');
    SQL.Add('mp.uf as uf_produtor,');
    SQL.Add('ml.nome_municipio as municipio_laboratorio,');
    SQL.Add('ml.uf as uf_laboratorio,');
    SQL.Add('an.data, an.numero_registro,');
    SQL.Add('an.valor, an.id_analise');
    SQL.Add('FROM  analise as an,');
    SQL.Add('produtor as p,');
    SQL.Add('tecnico as t,');
    SQL.Add('laboratorio as l,');
    SQL.Add('municipio as mp,');
    SQL.Add('municipio as ml');
    SQL.Add('WHERE');
    SQL.Add('p.id_produtor=an.id_produtor AND');
    SQL.Add('t.id_tecnico=an.id_tecnico AND');
    SQL.Add('l.id_tecnico=t.id_tecnico AND');
    SQL.Add('p.id_municipio=mp.id_municipio AND');
    SQL.Add('l.id_municipio=ml.id_municipio AND');
    SQL.Add('an.id_analise= ' +
      IntToStr(DataAnalise.ZQueryAnalise.FieldByName('id_analise').Value) + ';');
  end;
  DataRelatorio.ZQueryDetalhe.Active := True;
  DataRelatorio.ZQueryMestre.Active := True;
  DataRelatorio.ReportPrincipal.LoadFromFile('relatorio/laudoanalise.lrf');
end;

procedure TDataRelatorio.MostraRelatorio();
begin
  GeraRelatorio();
  DataRelatorio.ReportPrincipal.ShowReport();
end;

procedure TDataRelatorio.SalvaPdf();
begin
  DialogPdf.InitialDir := GetUserDir();
  if (DialogPdf.Execute) then
  begin
    GeraRelatorio();
    ReportPrincipal.PrepareReport;
    ReportPrincipal.ExportTo(TfrTNPDFExportFilter, DialogPdf.FileName);
  end;
end;

{ TDataRelatorio }

initialization
  {$I dmrelatorio.lrs}

end.
